package com.todo.content.application.service;

import com.todo.common.common.entity.response.page.PageResult;
import com.todo.common.common.enums.AllowedCommentEnum;
import com.todo.common.common.enums.biz.PrivateTypeEnum;
import com.todo.content.application.entity.bo.ContentDetailBO;
import com.todo.content.application.entity.bo.ContentInfoBO;
import com.todo.content.application.entity.bo.ContentInfoCountBO;
import com.todo.content.application.entity.condition.ContentInfoConditionBO;
import com.todo.content.common.enums.ContentStatusEnum;

import java.util.List;

/**
 * (ContentRelation)表服务接口
 *
 * @author zhangwenxiang
 * @since 2024-03-04 00:19:46
 */
public interface ContentInfoService {
    /**
     * 新增内容详情
     *
     * @param contentDetailBO
     * @return
     */
    Long insertContentDetail(ContentDetailBO contentDetailBO);

    /**
     * 更新内容详情
     *
     * @param contentDetailBO
     * @return
     */
    Boolean updateContentDetail(ContentDetailBO contentDetailBO);

    /**
     * 根据内容id删除详情
     *
     * @param contentId
     * @return
     */
    Boolean removeContentDetailById(Long contentId);

    /**
     * 更新内容状态
     *
     * @param contentId
     * @param oldStatus
     * @param newStatus
     * @return
     */
    Boolean updateContentStatus(Long contentId, ContentStatusEnum oldStatus, ContentStatusEnum newStatus);

    /**
     * 修改内容私密类型
     *
     * @param contentId
     * @param privateTypeEnum
     * @return
     */
    Boolean modifyPrivateType(Long contentId, PrivateTypeEnum privateTypeEnum);

    /**
     * 调整评论状态
     *
     * @param contentId
     * @param commentEnum
     * @return
     */
    Boolean modifyCommitType(Long contentId, AllowedCommentEnum commentEnum);

    /**
     * 根据id查询详情信息
     *
     * @param contentId
     * @return
     */
    ContentDetailBO queryContentDetailById(Long contentId);

    /**
     * 多条件查询内容信息
     *
     * @param conditionBO
     * @return
     */
    PageResult<ContentInfoBO> queryContentInfoByCondition(ContentInfoConditionBO conditionBO);

    /**
     * 保存操作前置校验
     *
     * @param contentDetailBO
     * @return
     */
    Boolean savePreCheck(ContentDetailBO contentDetailBO, Boolean isInsert);

    /**
     * 根据主键Id查询详情信息
     * MAX_SIZE = 50
     *
     * @param contentIdList
     * @return
     */
    List<ContentInfoBO> queryContentInfoByIdList(List<Long> contentIdList);

    /**
     * 根据主键Id删除详情信息
     *
     * @param removeContentIdList
     * @return
     */
    Boolean removeContentByIdList(List<Long> removeContentIdList);

    /**
     * 更新内容数量信息
     *
     * @param contentInfoCountBO
     * @return
     */
    Boolean updateContentInfoCount(ContentInfoCountBO contentInfoCountBO);
}
